home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Diamond Collection / The Diamond Collection (Software Vault)(Digital Impact).ISO / cdr34 / blowpas.zip / CRYPTBLW.PAS < prev    next >
Pascal/Delphi Source File  |  1994-12-31  |  4KB  |  117 lines

  1. PROGRAM cryptblw;
  2.  
  3. { CryptBlw.Pas (c) 1994 by Walter H. van Holst <2:281/201.4>
  4.   Example program of the usage of the BlowFish unit.            
  5.   
  6.   Hereby donated to the public domain                           }
  7.  
  8. USES Dos,Blowfish;
  9.  
  10. CONST
  11.      BufferSize=8192;
  12.  
  13. {$M $9000,0,$20000}
  14.  
  15. VAR
  16.    Key:String[56];
  17.    InputFile,OutputFile:PathStr;
  18.    Argument:STRING[2];
  19.    Teller,FillBuffer,NumRead,NumWritten:WORD;
  20.    Input,Output:File;
  21.    Buffer:ARRAY [0..BufferSize-1] OF LongInt;
  22.    InputSize,Counter,Debug,Test1,Test2:LongInt;
  23.    Buf:BYTE ABSOLUTE Buffer;
  24.    P:PArray;
  25.    S:SBox;
  26.    Hour,Minute,Second,Second100:Word;
  27.  
  28.  
  29. function File_Exists(const FileName: string): Boolean;
  30.    var
  31.       F: File;
  32.  
  33.    begin
  34.         Assign(F, FileName);
  35.         {$i-} Reset(F,1); {$i+}
  36.          File_Exists := IoResult = 0;
  37.    end;
  38.  
  39.  
  40. FUNCTION Passes(InputSize:LongInt):Longint;
  41.  BEGIN
  42.        Passes:=((InputSize DIV (BufferSize*4) ) + (InputSize MOD (BufferSize*4)) * 1 -
  43.         ((InputSize MOD (BufferSize *4)) * 1 - 1));
  44.  END;
  45.  
  46. BEGIN
  47.      WriteLn('******');
  48.      Argument:=Copy(ParamStr(1),1,2);
  49.      InputFile:=ParamStr(3);
  50.      OutputFile:=ParamStr(4);
  51.      Debug:=SizeOf(Buffer);
  52.      IF (ParamStr(1)<>'') AND (ParamStr(2)<>'') AND (ParamStr(3)<>'') THEN
  53.       BEGIN
  54.            IF File_Exists(ParamStr(3)) THEN
  55.             BEGIN
  56.              Key:=Copy(ParamStr(2),1,56);
  57.              WriteLn('Initializing key');
  58.              InitBlowFish(Key,P,S);
  59.              Filemode:=2;
  60.              Assign(Input,InputFile);
  61.              Reset(Input,1);
  62.              InputSize:=FileSize(Input);
  63.              IF OutPutFile<>'' THEN Assign(Output,OutPutFile) ELSE Assign(Output,'OUT.BLW');
  64.              ReWrite(Output,1);
  65.              Debug:=Passes(InputSize);
  66.              GetTime(Hour,Minute,Second,Second100);
  67.              WriteLn(Hour,':',Minute,':',Second,':',Second100);
  68.              IF Argument='-e' THEN
  69.               BEGIN
  70.                FOR Counter:=1 TO Passes(InputSize) DO
  71.                 BEGIN
  72.                  IF Counter<Passes(InputSize) THEN FillBuffer:=BufferSize*4 ELSE
  73.                    FillBuffer:=InputSize-((Passes(InputSize)-1)*(BufferSize*4));
  74.                  WriteLn('Filling buffer with data');
  75.                  BlockRead(Input,Buffer,SizeOf(Buffer),NumRead);
  76.                  WriteLn('Encrypting the data');
  77.                  FOR Teller:=0 TO (FillBuffer DIV 4)-1 DO
  78.                   BEGIN
  79.                    BlowEncrypt(Buffer[Teller],Buffer[Teller+1],P,S);
  80.                    Inc(Teller);
  81.                    {WriteLn(Teller);}
  82.                   END;
  83.                  WriteLn('Writing the data');
  84.                  BlockWrite(Output,Buffer,NumRead,NumWritten);
  85.                  Write  ('Pass ');
  86.                  Write  (Counter);
  87.                  Write  (' of ');
  88.                  WriteLn(InputSize DIV BufferSize);
  89.                 END;
  90.                Close(Input);
  91.                Close(Output);
  92.               END
  93.              ELSE
  94.              IF ParamStr(1)='-d' THEN
  95.               BEGIN
  96.                WriteLn('Decrypting '+ParamStr(3));
  97.                FOR Counter:=1 TO Passes(InputSize) DO
  98.                 BEGIN
  99.                  IF Counter<Passes(InputSize) THEN FillBuffer:=BufferSize*4 ELSE
  100.                    FillBuffer:=InputSize-((Passes(InputSize)-1)*(BufferSize*4));
  101.                  BlockRead(Input,Buffer,SizeOf(Buffer),NumRead);
  102.                  FOR Teller:=0 TO (FillBuffer DIV 4)-1 DO
  103.                   BEGIN
  104.                    BlowDecrypt(Buffer[Teller],Buffer[Teller+1],P,S);
  105.                    Inc(Teller);
  106.                   END;
  107.                  BlockWrite(Output,Buffer,NumRead,NumWritten);
  108.                 END;
  109.                Close(Input);
  110.                Close(Output);
  111.                END;
  112.              GetTime(Hour,Minute,Second,Second100);
  113.              WriteLn(Hour,':',Minute,':',Second,':',Second100);
  114.             END;
  115.       END;
  116. END.
  117.